<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>
  <script src="../lib/index.js"></script>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    canvas {
      margin: 50px auto 0;
      display: block;
      background-color: yellow;
    }
  </style>
</head>

<body>
  <canvas id="canvasId" width="400" height="400">
    此浏览器不支持canvas
  </canvas>
</body>

</html>
<script>
  const ctx = document.getElementById("canvasId");
  const gl = ctx.getContext("webgl");

  // 定义顶点着色器源码 gl_Position vec4(1.0, 0.0, 0.0, 1.0) x,y,z, w齐次坐标 （x/w,y/w,z/w）
  const VERTEX_SHADER_SOURCE = `
    attribute vec4 aPosition;
    attribute float aPointSize;
    void main() {
      // 设置顶点位置
      gl_Position = aPosition;
      // 设置点的大小
      gl_PointSize = aPointSize;
    }
  `;

  // 定义片元着色器源码
  const FRAGMENT_SHADER_SOURCE = `
    // 主函数
    void main() {
      // 设置片元颜色为红色 
      gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }
  `;

  const program = initShader(gl, VERTEX_SHADER_SOURCE, FRAGMENT_SHADER_SOURCE);

  const aPosition = gl.getAttribLocation(program, "aPosition"); // 获取attribute变量的存储位置
  // 创建一个Float32Array数组，用于存储顶点坐标
  const points = new Float32Array([
    // 顶点1的x坐标和y坐标
    -0.5, 0.5,
    // 顶点2的x坐标和y坐标
    -0.5, -0.5,
    // 顶点3的x坐标和y坐标
    0.5, 0.5,
  ]);
  const buffer = gl.createBuffer(); // 创建缓冲区对象
  gl.bindBuffer(gl.ARRAY_BUFFER, buffer); // 绑定缓冲区对象
  gl.bufferData(gl.ARRAY_BUFFER, points, gl.STATIC_DRAW); // 向缓冲区对象写入数据
  gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, 0, 0); // 将缓冲区对象分配给attribute变量
  gl.enableVertexAttribArray(aPosition); // 开启attribute变量（激活）

  const aPointSize = gl.getAttribLocation(program, "aPointSize"); // 获取attribute变量的存储位置
  const size = new Float32Array([
    10.0, 
    20.0, 
    30.0,
  ]); // 创建一个Float32Array数组，用于存储点的大小
  const sizeBuffer = gl.createBuffer(); // 创建缓冲区对象
  gl.bindBuffer(gl.ARRAY_BUFFER, sizeBuffer); // 绑定缓冲区对象
  gl.bufferData(gl.ARRAY_BUFFER, size, gl.STATIC_DRAW); // 向缓冲区对象写入数据
  gl.vertexAttribPointer(aPointSize, 1, gl.FLOAT, false, 0, 0); // 将缓冲区对象分配给attribute变量
  gl.enableVertexAttribArray(aPointSize); // 开启attribute变量（激活）

  // gl.vertexAttrib2f(aPosition, 0.0, 0.0); // 设置attribute变量的值

  // 绘制三个 点
gl.drawArrays(gl.POINTS, 0, 3); 

</script>